package com.wy.volatile_demo;

import java.util.concurrent.TimeUnit;

/**
 * @author 美女
 * @date 2022/04/27 21:53
 **/
//volatile保证内存可见性
public class WithOutVolatile {
    volatile static boolean quit=false;
    static class MyThread extends Thread{
        @Override
        public void run() {
            long r=0;
            while (quit==false){
                r++;
            }
            System.out.println(r);
        }

    }

    public static void main(String[] args) throws InterruptedException {
        MyThread t=new MyThread();
        t.start();
        TimeUnit.SECONDS.sleep(5);//休眠5s
        quit=true;//5s后修改quit
    }
    //理论上输出r有个值，但是实际上无输出，说明quit仍旧读的工作内存中的quit，工作内存中quit为false而未读到主内存中修改的true
    //解决方案：static boolean quit=false;的static前加上volatile
}
